package br.com.ordersys.web.client.modules.uicomp;

import java.util.Date;

import com.google.gwt.core.client.Scheduler;
import com.google.gwt.event.dom.client.ErrorEvent;
import com.google.gwt.event.dom.client.ErrorHandler;
import com.google.gwt.event.dom.client.LoadEvent;
import com.google.gwt.event.dom.client.LoadHandler;
import com.google.gwt.user.client.ui.Image;

/**
 * Estende a Image padrão dando a ela o recurso de carregar uma imagem padrão caso a imagem principal não possa ser carregada
 * @author Cláudio Gualberto
 * 01/07/2013
 *
 */
public class FallbackImage extends Image {
	private String fallbackUrl;
	private String originalUrl;

	public FallbackImage(String url){
		this(url,null);
		originalUrl = url;
	}
	
	public FallbackImage(String url, String fallbackURL) {
		super(url);
		setVisible(false); //começamos como invisivel para dar a chance da imagem ser carregada sem o navegador mostrar aquela imagem quebrada quando não for encontrada

		this.fallbackUrl = fallbackURL;
		addListeners();
	}

	private void addListeners() {
		addErrorHandler(new ErrorHandler() {
			@Override
			public void onError(ErrorEvent e) {
				//imagem não foi encontrada, então mostramos a imagem padrão
				if (fallbackUrl != null) {
					setUrl(fallbackUrl);
				}
				setVisible(true);
			}
		});

		addLoadHandler(new LoadHandler() {
			@Override
			public void onLoad(LoadEvent e) {
				//se a imagem foi carregada com sucesso então a mostramos
				setVisible(true);
			}
		});

	}

	public void setFallbackURL(String url) {
		this.fallbackUrl = url;
	}
	
	public void reload(){
		setUrl(originalUrl+ "?t=" + new Date().getTime());
	}

}
